home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / phpMyAdmin / libraries / auth / cookie.auth.lib.php < prev    next >
PHP Script  |  2005-03-06  |  25KB  |  634 lines

  1. <?php
  2. /* $Id: cookie.auth.lib.php,v 2.25 2005/03/06 21:10:53 nijel Exp $ */
  3. // vim: expandtab sw=4 ts=4 sts=4:
  4.  
  5. // +--------------------------------------------------------------------------+
  6. // | Set of functions used to run cookie based authentication.                |
  7. // | Thanks to Piotr Roszatycki <d3xter at users.sourceforge.net> and         |
  8. // | Dan Wilson who built this patch for the Debian package.                  |
  9. // +--------------------------------------------------------------------------+
  10.  
  11.  
  12. if (!isset($coming_from_common)) {
  13.    exit;
  14. }
  15.  
  16. // Gets the default font sizes
  17. PMA_setFontSizes();
  18.  
  19. // timestamp for login timeout
  20. $current_time  = time();
  21.  
  22. // Uses faster mcrypt library if available
  23. // (Note: mcrypt.lib.php needs $cookie_path and $is_https)
  24. // TODO: try to load mcrypt?
  25. if (function_exists('mcrypt_encrypt')) {
  26.     require_once('./libraries/mcrypt.lib.php');
  27. } else {
  28.     require_once('./libraries/blowfish.php');
  29. }
  30.  
  31. /**
  32.  * Sorts available languages by their true names
  33.  *
  34.  * @param   array   the array to be sorted
  35.  * @param   mixed   a required parameter
  36.  *
  37.  * @return  the sorted array
  38.  *
  39.  * @access  private
  40.  */
  41. function PMA_cookie_cmp(&$a, $b)
  42. {
  43.     return (strcmp($a[1], $b[1]));
  44. } // end of the 'PMA_cmp()' function
  45.  
  46.  
  47. /**
  48.  * Displays authentication form
  49.  *
  50.  * @global  string    the font face to use
  51.  * @global  string    the default font size to use
  52.  * @global  string    the big font size to use
  53.  * @global  array     the list of servers settings
  54.  * @global  array     the list of available translations
  55.  * @global  string    the current language
  56.  * @global  integer   the current server id
  57.  * @global  string    the currect charset for MySQL
  58.  * @global  array     the array of cookie variables if register_globals is
  59.  *                    off
  60.  *
  61.  * @return  boolean   always true (no return indeed)
  62.  *
  63.  * @access  public
  64.  */
  65. function PMA_auth()
  66. {
  67.     global $right_font_family, $font_size, $font_bigger;
  68.     global $cfg, $available_languages;
  69.     global $lang, $server, $convcharset;
  70.     global $conn_error;
  71.  
  72.     // Tries to get the username from cookie whatever are the values of the
  73.     // 'register_globals' and the 'variables_order' directives if last login
  74.     // should be recalled, else skip the IE autocomplete feature.
  75.     if ($cfg['LoginCookieRecall']) {
  76.         // username
  77.         // do not try to use pma_cookie_username as it was encoded differently
  78.         // in previous versions and would produce an undefined offset in blowfish
  79.         if (!empty($_COOKIE) && isset($_COOKIE['pma_cookie_username-' . $server])) {
  80.             $default_user = $_COOKIE['pma_cookie_username-' . $server];
  81.         }
  82.         $decrypted_user = isset($default_user) ? PMA_blowfish_decrypt($default_user, $GLOBALS['cfg']['blowfish_secret']) : '';
  83.         $pos = strrpos($decrypted_user, ':');
  84.         $default_user = substr($decrypted_user, 0, $pos);
  85.         // server name
  86.         if (!empty($GLOBALS['pma_cookie_servername'])) {
  87.             $default_server = $GLOBALS['pma_cookie_servername'];
  88.         }
  89.         else if (!empty($_COOKIE) && isset($_COOKIE['pma_cookie_servername-' . $server])) {
  90.             $default_server = $_COOKIE['pma_cookie_servername-' . $server];
  91.         }
  92.         if (isset($default_server) && get_magic_quotes_gpc()) {
  93.             $default_server = stripslashes($default_server);
  94.         }
  95.  
  96.         $autocomplete     = '';
  97.     }
  98.     else {
  99.         $default_user     = '';
  100.         $autocomplete     = ' autocomplete="off"';
  101.     }
  102.  
  103.     $cell_align = ($GLOBALS['text_dir'] == 'ltr') ? 'left' : 'right';
  104.  
  105.     // Defines the charset to be used
  106.     header('Content-Type: text/html; charset=' . $GLOBALS['charset']);
  107.  
  108.     require_once('./libraries/select_theme.lib.php');
  109.     // Defines the "item" image depending on text direction
  110.     $item_img = $GLOBALS['pmaThemeImage'] . 'item_ltr.png';
  111.  
  112.     // Title
  113.     ?>
  114. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  115.     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  116. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $GLOBALS['available_languages'][$GLOBALS['lang']][2]; ?>" lang="<?php echo $GLOBALS['available_languages'][$GLOBALS['lang']][2]; ?>" dir="<?php echo $GLOBALS['text_dir']; ?>">
  117.  
  118. <head>
  119. <title>phpMyAdmin <?php echo PMA_VERSION; ?></title>
  120. <meta http-equiv="Content-Type" content="text/html; charset=<?php echo $GLOBALS['charset']; ?>" />
  121. <script language="JavaScript" type="text/javascript">
  122. <!--
  123.     /* added 2004-06-10 by Michael Keck
  124.      *       we need this for Backwards-Compatibility and resolving problems
  125.      *       with non DOM browsers, which may have problems with css 2 (like NC 4)
  126.     */
  127.     var isDOM      = (typeof(document.getElementsByTagName) != 'undefined'
  128.                       && typeof(document.createElement) != 'undefined')
  129.                    ? 1 : 0;
  130.     var isIE4      = (typeof(document.all) != 'undefined'
  131.                       && parseInt(navigator.appVersion) >= 4)
  132.                    ? 1 : 0;
  133.     var isNS4      = (typeof(document.layers) != 'undefined')
  134.                    ? 1 : 0;
  135.     var capable    = (isDOM || isIE4 || isNS4)
  136.                    ? 1 : 0;
  137.     // Uggly fix for Opera and Konqueror 2.2 that are half DOM compliant
  138.     if (capable) {
  139.         if (typeof(window.opera) != 'undefined') {
  140.             var browserName = ' ' + navigator.userAgent.toLowerCase();
  141.             if ((browserName.indexOf('konqueror 7') == 0)) {
  142.                 capable = 0;
  143.             }
  144.         } else if (typeof(navigator.userAgent) != 'undefined') {
  145.             var browserName = ' ' + navigator.userAgent.toLowerCase();
  146.             if ((browserName.indexOf('konqueror') > 0) && (browserName.indexOf('konqueror/3') == 0)) {
  147.                 capable = 0;
  148.             }
  149.         } // end if... else if...
  150.     } // end if
  151.     document.writeln('<link rel="stylesheet" type="text/css" href="<?php echo defined('PMA_PATH_TO_BASEDIR') ? PMA_PATH_TO_BASEDIR : './'; ?>css/phpmyadmin.css.php?lang=<?php echo $GLOBALS['available_languages'][$GLOBALS['lang']][2]; ?>&js_frame=right&js_isDOM=' + isDOM + '" />');
  152. //-->
  153. </script>
  154. <noscript>
  155.     <link rel="stylesheet" type="text/css" href="<?php echo defined('PMA_PATH_TO_BASEDIR') ? PMA_PATH_TO_BASEDIR : './'; ?>css/phpmyadmin.css.php?lang=<?php echo $GLOBALS['available_languages'][$GLOBALS['lang']][2]; ?>&js_frame=right" />
  156. </noscript>
  157.  
  158. <base href="<?php echo $cfg['PmaAbsoluteUri']; ?>" />
  159. <script language="javascript" type="text/javascript">
  160. <!--
  161. // show login form in top frame
  162. if (top != self) {
  163.     window.top.location.href=location;
  164. }
  165. //-->
  166. </script>
  167. </head>
  168.  
  169. <body bgcolor="<?php echo $cfg['RightBgColor']; ?>">
  170.  
  171. <?php include('./config.header.inc.php'); ?>
  172.  
  173. <center>
  174. <a href="http://www.phpmyadmin.net" target="_blank"><?php
  175.     $logo_image = $GLOBALS['pmaThemeImage'] . 'logo_right.png';
  176.     if (@file_exists($logo_image)) {
  177.         echo '<img src="' . $logo_image . '" id="imLogo" name="imLogo" alt="phpMyAdmin" border="0" />';
  178.     } else {
  179.         echo '<img name="imLogo" id="imLogo" src="' . $GLOBALS['pmaThemeImage'] . 'pma_logo.png' . '" '
  180.            . 'border="0" width="88" height="31" alt="phpMyAdmin" />';
  181.     }
  182. ?></a>
  183. <h2><?php echo sprintf($GLOBALS['strWelcome'], ' phpMyAdmin ' . PMA_VERSION); ?></h2>
  184.     <?php
  185.     // Displays the languages form
  186.     if (empty($cfg['Lang'])) {
  187.         echo "\n";
  188.         ?>
  189. <!-- Language selection -->
  190. <form method="post" action="index.php" target="_top">
  191.     <input type="hidden" name="server" value="<?php echo $server; ?>" />
  192.     <table border="0" cellpadding="3" cellspacing="0">
  193.         <tr>
  194.             <td><b>Language: </b></td>
  195.             <td>
  196.     <select name="lang" dir="ltr" onchange="this.form.submit();">
  197.         <?php
  198.         echo "\n";
  199.  
  200.         uasort($available_languages, 'PMA_cookie_cmp');
  201.         foreach ($available_languages AS $id => $tmplang) {
  202.             $lang_name = ucfirst(substr(strrchr($tmplang[0], '|'), 1));
  203.             if ($lang == $id) {
  204.                 $selected = ' selected="selected"';
  205.             } else {
  206.                 $selected = '';
  207.             }
  208.             echo '        ';
  209.             echo '<option value="' . $id . '"' . $selected . '>' . $lang_name . ' (' . $id . ')</option>' . "\n";
  210.         } // end while
  211.         ?>
  212.     </select>
  213.     <input type="submit" value="<?php echo $GLOBALS['strGo']; ?>" />
  214.             </td>
  215.         </tr>
  216.         <?php
  217.     }
  218.     echo "\n\n";
  219.  
  220.     // Displays the warning message and the login form
  221.  
  222.     if ($GLOBALS['cfg']['blowfish_secret']=='') {
  223.     ?>
  224.         <tr><td colspan="2" height="5"></td></tr>
  225.         <tr>
  226.             <th colspan="2" align="left" class="tblHeadError">
  227.                 <div class="errorhead"><?php echo $GLOBALS['strError']; ?></div>
  228.             </th>
  229.         </tr>
  230.         <tr>
  231.             <td class="tblError" colspan="2" align="left"><?php echo $GLOBALS['strSecretRequired']; ?></td>
  232.         </tr>
  233. <?php
  234.         include('./config.footer.inc.php');
  235.         echo '        </table>' . "\n"
  236.            . '    </form>' . "\n"
  237.            . '    </body>' . "\n"
  238.            . '</html>';
  239.         exit();
  240.     }
  241. ?>
  242.     </table>
  243. </form>
  244. <br />
  245. <!-- Login form -->
  246. <form method="post" action="index.php" name="login_form"<?php echo $autocomplete; ?> target="_top">
  247.     <table cellpadding="3" cellspacing="0">
  248.       <tr>
  249.         <th align="left" colspan="2" class="tblHeaders" style="font-size: 14px; font-weight: bold;"><?php echo $GLOBALS['strLogin']; ?></th>
  250.     </tr>
  251.     <tr>
  252.         <td align="center" colspan="2" bgcolor="<?php echo $GLOBALS['cfg']['BgcolorOne']; ?>"><?php echo '(' . $GLOBALS['strCookiesRequired'] . ')'; ?></td>
  253.     </tr>
  254. <?php if ($GLOBALS['cfg']['AllowArbitraryServer']) { ?>
  255.     <tr>
  256.         <td align="right" bgcolor="<?php echo $GLOBALS['cfg']['BgcolorOne']; ?>"><b><?php echo $GLOBALS['strLogServer']; ?>: </b></td>
  257.         <td align="<?php echo $cell_align; ?>" bgcolor="<?php echo $GLOBALS['cfg']['BgcolorOne']; ?>">
  258.             <input type="text" name="pma_servername" value="<?php echo (isset($default_server) ? $default_server : ''); ?>" size="24" class="textfield" onfocus="this.select()" />
  259.         </td>
  260.     </tr>
  261. <?php } ?>
  262.     <tr>
  263.         <td align="right" bgcolor="<?php echo $GLOBALS['cfg']['BgcolorOne']; ?>"><b><?php echo $GLOBALS['strLogUsername']; ?> </b></td>
  264.         <td align="<?php echo $cell_align; ?>" bgcolor="<?php echo $GLOBALS['cfg']['BgcolorOne']; ?>">
  265.             <input type="text" name="pma_username" value="<?php echo (isset($default_user) ? $default_user : ''); ?>" size="24" class="textfield" onfocus="this.select()" />
  266.         </td>
  267.     </tr>
  268.     <tr>
  269.         <td align="right" bgcolor="<?php echo $GLOBALS['cfg']['BgcolorOne']; ?>"><b><?php echo $GLOBALS['strLogPassword']; ?> </b></td>
  270.         <td align="<?php echo $cell_align; ?>" bgcolor="<?php echo $GLOBALS['cfg']['BgcolorOne']; ?>">
  271.             <input type="password" name="pma_password" value="" size="24" class="textfield" onfocus="this.select()" />
  272.         </td>
  273.     </tr>
  274.     <?php
  275.     if (count($cfg['Servers']) > 1) {
  276.         echo "\n";
  277.         ?>
  278.     <tr>
  279.         <td align="right" bgcolor="<?php echo $GLOBALS['cfg']['BgcolorOne']; ?>"><b><?php echo $GLOBALS['strServerChoice']; ?>: </b></td>
  280.         <td align="<?php echo $cell_align; ?>" bgcolor="<?php echo $GLOBALS['cfg']['BgcolorOne']; ?>">
  281.             <select name="server"
  282.             <?php
  283.             if ($GLOBALS['cfg']['AllowArbitraryServer']) {
  284.                 echo ' onchange="document.forms[\'login_form\'].elements[\'pma_servername\'].value = \'\'" ';
  285.             }
  286.             ?>
  287.             >
  288.         <?php
  289.         echo "\n";
  290.         // Displays the MySQL servers choice
  291.         foreach ($cfg['Servers'] AS $key => $val) {
  292.             if (!empty($val['host']) || $val['auth_type'] == 'arbitrary') {
  293.                 echo '                <option value="' . $key . '"';
  294.                 if (!empty($server) && ($server == $key)) {
  295.                     echo ' selected="selected"';
  296.                 }
  297.                 echo '>';
  298.                 if ($val['verbose'] != '') {
  299.                     echo $val['verbose'];
  300.                 } elseif ($val['auth_type'] == 'arbitrary') {
  301.                     echo $GLOBALS['strArbitrary'];
  302.                 } else {
  303.                     echo $val['host'];
  304.                     if (!empty($val['port'])) {
  305.                         echo ':' . $val['port'];
  306.                     }
  307.                     // loic1: skip this because it's not a so good idea to
  308.                     //        display sockets used to everybody
  309.                     // if (!empty($val['socket']) && PMA_PHP_INT_VERSION >= 30010) {
  310.                     //     echo ':' . $val['socket'];
  311.                     // }
  312.                 }
  313.                 // loic1: if 'only_db' is an array and there is more than one
  314.                 //        value, displaying such informations may not be a so
  315.                 //        good idea
  316.                 if (!empty($val['only_db'])) {
  317.                     echo ' - ' . (is_array($val['only_db']) ? implode(', ', $val['only_db']) : $val['only_db']);
  318.                 }
  319.                 if (!empty($val['user']) && ($val['auth_type'] == 'basic')) {
  320.                     echo '  (' . $val['user'] . ')';
  321.                 }
  322.                 echo ' </option>' . "\n";
  323.             } // end if (!empty($val['host']))
  324.         } // end while
  325.         ?>
  326.             </select>
  327.         </td>
  328.     </tr>
  329.         <?php
  330.     } // end if (server choice)
  331.     echo "\n";
  332.     if (!empty($conn_error)) {
  333.         echo '<tr><td colspan="2" height="5"></td></tr>';
  334.         echo '<tr><th colspan="2" align="left" class="tblHeadError"><div class="errorhead">' . $GLOBALS['strError'] . '</div></th></tr>' . "\n";
  335.         echo '<tr><td colspan="2" align="left" class="tblError">'. $conn_error . '</td></tr>' . "\n";
  336.     }
  337.     ?>
  338.     <tr>
  339.         <td colspan="2" align="right">
  340.     <?php
  341.     if (count($cfg['Servers']) == 1) {
  342.         echo '    <input type="hidden" name="server" value="' . $server . '" />';
  343.     }
  344.     echo "\n";
  345.     ?>
  346.             <input type="hidden" name="lang" value="<?php echo $lang; ?>" />
  347.             <input type="hidden" name="convcharset" value="<?php echo $convcharset; ?>" />
  348.     <?php
  349.     if (isset($GLOBALS['db'])) {
  350.         echo '            <input type="hidden" name="db" value="' . htmlspecialchars($GLOBALS['db']) . '" />' . "\n";
  351.     }
  352.     ?>
  353.             <input type="submit" value="<?php echo $GLOBALS['strLogin']; ?>" id="buttonYes" />
  354.         </td>
  355.     </tr>
  356.     </table>
  357. </form>
  358. </center>
  359.  
  360. <script type="text/javascript" language="javascript">
  361. <!--
  362. var uname = document.forms['login_form'].elements['pma_username'];
  363. var pword = document.forms['login_form'].elements['pma_password'];
  364. if (uname.value == '') {
  365.     uname.focus();
  366. } else {
  367.     pword.focus();
  368. }
  369. //-->
  370. </script>
  371.  
  372. <?php include('./config.footer.inc.php'); ?>
  373.  
  374. </body>
  375.  
  376. </html>
  377.     <?php
  378.     exit();
  379.  
  380.     return TRUE;
  381. } // end of the 'PMA_auth()' function
  382.  
  383.  
  384. /**
  385.  * Gets advanced authentication settings
  386.  *
  387.  * @global  string    the username if register_globals is on
  388.  * @global  string    the password if register_globals is on
  389.  * @global  array     the array of cookie variables if register_globals is
  390.  *                    off
  391.  * @global  string    the servername sent by the login form
  392.  * @global  string    the username sent by the login form
  393.  * @global  string    the password sent by the login form
  394.  * @global  string    the username of the user who logs out
  395.  * @global  boolean   whether the login/password pair is grabbed from a
  396.  *                    cookie or not
  397.  *
  398.  * @return  boolean   whether we get authentication settings or not
  399.  *
  400.  * @access  public
  401.  */
  402. function PMA_auth_check()
  403. {
  404.     global $PHP_AUTH_USER, $PHP_AUTH_PW, $pma_auth_server;
  405.     global $pma_servername, $pma_username, $pma_password, $old_usr, $server;
  406.     global $from_cookie;
  407.  
  408.     // avoid an error in mcrypt
  409.     if ($GLOBALS['cfg']['blowfish_secret']=='') {
  410.         return FALSE;
  411.     }
  412.  
  413.     // Initialization
  414.     $PHP_AUTH_USER = $PHP_AUTH_PW = '';
  415.     $from_cookie   = FALSE;
  416.     $from_form     = FALSE;
  417.  
  418.     // The user wants to be logged out -> delete password cookie
  419.     if (!empty($old_usr)) {
  420.         setcookie('pma_cookie_password-' . $server, '', 0, $GLOBALS['cookie_path'], '' , $GLOBALS['is_https']);
  421.     }
  422.  
  423.     // The user just logged in
  424.     else if (!empty($pma_username)) {
  425.         $PHP_AUTH_USER = $pma_username;
  426.         $PHP_AUTH_PW   = (empty($pma_password)) ? '' : $pma_password;
  427.         if ($GLOBALS['cfg']['AllowArbitraryServer']) {
  428.             $pma_auth_server = $pma_servername;
  429.         }
  430.         $from_form     = TRUE;
  431.     }
  432.  
  433.     // At the end, try to set the $PHP_AUTH_USER & $PHP_AUTH_PW variables
  434.     // from cookies whatever are the values of the 'register_globals' and
  435.     // the 'variables_order' directives
  436.     else {
  437.         if ($GLOBALS['cfg']['AllowArbitraryServer']) {
  438.             // servername
  439.             if (!empty($pma_cookie_servername)) {
  440.                 $pma_auth_server = $pma_cookie_servername;
  441.                 $from_cookie   = TRUE;
  442.             }
  443.             else if (!empty($_COOKIE) && isset($_COOKIE['pma_cookie_servername-' . $server])) {
  444.                 $pma_auth_server = $_COOKIE['pma_cookie_servername-' . $server];
  445.                 $from_cookie   = TRUE;
  446.             }
  447.         }
  448.  
  449.         // username
  450.         if (!empty($_COOKIE) && isset($_COOKIE['pma_cookie_username-' . $server])) {
  451.             $PHP_AUTH_USER = $_COOKIE['pma_cookie_username-' . $server];
  452.             $from_cookie   = TRUE;
  453.         }
  454.         $decrypted_user = PMA_blowfish_decrypt($PHP_AUTH_USER, $GLOBALS['cfg']['blowfish_secret']);
  455.         $pos = strrpos($decrypted_user, ':');
  456.         $PHP_AUTH_USER = substr($decrypted_user, 0, $pos);
  457.         $decrypted_time = (int)substr($decrypted_user, $pos + 1);
  458.  
  459.         // User inactive too long
  460.         if ($decrypted_time > 0 && $decrypted_time < $GLOBALS['current_time'] - $GLOBALS['cfg']['LoginCookieValidity']) {
  461.             // Display an error message only if the inactivity has lasted
  462.             // less than 4 times the timeout value. This is to avoid
  463.             // alerting users with a error after "much" time has passed,
  464.             // for example next morning.
  465.             if ($decrypted_time > $GLOBALS['current_time'] - ($GLOBALS['cfg']['LoginCookieValidity'] * 4)) {
  466.                 $GLOBALS['no_activity'] = TRUE;
  467.                 PMA_auth_fails();
  468.             }
  469.             return FALSE;
  470.         }
  471.  
  472.         // password
  473.         if (!empty($pma_cookie_password)) {
  474.             $PHP_AUTH_PW   = $pma_cookie_password;
  475.         }
  476.         else if (!empty($_COOKIE) && isset($_COOKIE['pma_cookie_password-' . $server])) {
  477.             $PHP_AUTH_PW   = $_COOKIE['pma_cookie_password-' . $server];
  478.         }
  479.         else {
  480.             $from_cookie   = FALSE;
  481.         }
  482.         $PHP_AUTH_PW = PMA_blowfish_decrypt($PHP_AUTH_PW, $GLOBALS['cfg']['blowfish_secret'] . $decrypted_time);
  483.  
  484.         if ($PHP_AUTH_PW == "\xff(blank)") {
  485.             $PHP_AUTH_PW   = '';
  486.         }
  487.     }
  488.  
  489.     // Returns whether we get authentication settings or not
  490.     if (!$from_cookie && !$from_form) {
  491.         return FALSE;
  492.     } elseif ($from_cookie) {
  493.         return TRUE;
  494.     } else {
  495.         // we don't need to strip here, it is done in grab_globals
  496.         return TRUE;
  497.     }
  498. } // end of the 'PMA_auth_check()' function
  499.  
  500.  
  501. /**
  502.  * Set the user and password after last checkings if required
  503.  *
  504.  * @global  array     the valid servers settings
  505.  * @global  integer   the id of the current server
  506.  * @global  array     the current server settings
  507.  * @global  string    the current username
  508.  * @global  string    the current password
  509.  * @global  boolean   whether the login/password pair has been grabbed from
  510.  *                    a cookie or not
  511.  *
  512.  * @return  boolean   always true
  513.  *
  514.  * @access  public
  515.  */
  516. function PMA_auth_set_user()
  517. {
  518.     global $cfg, $server;
  519.     global $PHP_AUTH_USER, $PHP_AUTH_PW, $pma_auth_server;
  520.     global $from_cookie;
  521.  
  522.     // Ensures valid authentication mode, 'only_db', bookmark database and
  523.     // table names and relation table name are used
  524.     if ($cfg['Server']['user'] != $PHP_AUTH_USER) {
  525.         $servers_cnt = count($cfg['Servers']);
  526.         for ($i = 1; $i <= $servers_cnt; $i++) {
  527.             if (isset($cfg['Servers'][$i])
  528.                 && ($cfg['Servers'][$i]['host'] == $cfg['Server']['host'] && $cfg['Servers'][$i]['user'] == $PHP_AUTH_USER)) {
  529.                 $server        = $i;
  530.                 $cfg['Server'] = $cfg['Servers'][$i];
  531.                 break;
  532.             }
  533.         } // end for
  534.     } // end if
  535.  
  536.     $pma_server_changed = FALSE;
  537.     if ($GLOBALS['cfg']['AllowArbitraryServer']
  538.             && isset($pma_auth_server) && !empty($pma_auth_server)
  539.             && ($cfg['Server']['host'] != $pma_auth_server)
  540.             ) {
  541.         $cfg['Server']['host'] = $pma_auth_server;
  542.         $pma_server_changed = TRUE;
  543.     }
  544.     $cfg['Server']['user']     = $PHP_AUTH_USER;
  545.     $cfg['Server']['password'] = $PHP_AUTH_PW;
  546.  
  547.     // Name and password cookies needs to be refreshed each time
  548.     // Duration = one month for username
  549.     setcookie('pma_cookie_username-' . $server,
  550.         PMA_blowfish_encrypt($cfg['Server']['user'] . ':' . $GLOBALS['current_time'],
  551.             $GLOBALS['cfg']['blowfish_secret']),
  552.         time() + (60 * 60 * 24 * 30),
  553.         $GLOBALS['cookie_path'], '',
  554.         $GLOBALS['is_https']);
  555.  
  556.     // Duration = till the browser is closed for password (we don't want this to be saved)
  557.     setcookie('pma_cookie_password-' . $server,
  558.         PMA_blowfish_encrypt(!empty($cfg['Server']['password']) ? $cfg['Server']['password'] : "\xff(blank)",
  559.             $GLOBALS['cfg']['blowfish_secret'] . $GLOBALS['current_time']),
  560.         0,
  561.         $GLOBALS['cookie_path'], '',
  562.         $GLOBALS['is_https']);
  563.  
  564.     // Set server cookies if required (once per session) and, in this case, force
  565.     // reload to ensure the client accepts cookies
  566.     if (!$from_cookie) {
  567.         if ($GLOBALS['cfg']['AllowArbitraryServer']) {
  568.             if (isset($pma_auth_server) && !empty($pma_auth_server) && $pma_server_changed) {
  569.                 // Duration = one month for serverrname
  570.                 setcookie('pma_cookie_servername-' . $server,
  571.                     $cfg['Server']['host'],
  572.                     time() + (60 * 60 * 24 * 30),
  573.                     $GLOBALS['cookie_path'], '',
  574.                     $GLOBALS['is_https']);
  575.             } else {
  576.                 // Delete servername cookie
  577.                 setcookie('pma_cookie_servername-' . $server, '', 0, $GLOBALS['cookie_path'], '' , $GLOBALS['is_https']);
  578.             }
  579.         }
  580.  
  581.         // loic1: workaround against a IIS 5.0 bug
  582.         // lem9: here, PMA_sendHeaderLocation() has not yet been defined,
  583.         //       so use the workaround
  584.         if (empty($GLOBALS['SERVER_SOFTWARE'])) {
  585.             if (isset($_SERVER) && !empty($_SERVER['SERVER_SOFTWARE'])) {
  586.                 $GLOBALS['SERVER_SOFTWARE'] = $_SERVER['SERVER_SOFTWARE'];
  587.             }
  588.         } // end if
  589.         if (!empty($GLOBALS['SERVER_SOFTWARE']) && $GLOBALS['SERVER_SOFTWARE'] == 'Microsoft-IIS/5.0') {
  590.             header('Refresh: 0; url=' . $cfg['PmaAbsoluteUri'] . 'index.php?' . PMA_generate_common_url('', '', '&'));
  591.         }
  592.         else {
  593.             header('Location: ' . $cfg['PmaAbsoluteUri'] . 'index.php?' . PMA_generate_common_url('', '', '&'));
  594.         }
  595.         exit();
  596.     } // end if
  597.  
  598.     return TRUE;
  599. } // end of the 'PMA_auth_set_user()' function
  600.  
  601.  
  602. /**
  603.  * User is not allowed to login to MySQL -> authentication failed
  604.  *
  605.  * @return  boolean   always true (no return indeed)
  606.  *
  607.  * @access  public
  608.  */
  609. function PMA_auth_fails()
  610. {
  611. global $conn_error, $server;
  612.  
  613.     // Deletes password cookie and displays the login form
  614.     setcookie('pma_cookie_password-' . $server, '', 0, $GLOBALS['cookie_path'], '' , $GLOBALS['is_https']);
  615.  
  616.     if (isset($GLOBALS['allowDeny_forbidden']) && $GLOBALS['allowDeny_forbidden']) {
  617.         $conn_error = $GLOBALS['strAccessDenied'];
  618.     } else if (isset($GLOBALS['no_activity']) && $GLOBALS['no_activity']) {
  619.         $conn_error = sprintf($GLOBALS['strNoActivity'],$GLOBALS['cfg']['LoginCookieValidity']);
  620.     } else if (PMA_DBI_getError()) {
  621.         $conn_error = PMA_DBI_getError();
  622.     } else if (isset($php_errormsg)) {
  623.         $conn_error = $php_errormsg;
  624.     } else {
  625.         $conn_error = $GLOBALS['strCannotLogin'];
  626.     }
  627.  
  628.     PMA_auth();
  629.  
  630.     return TRUE;
  631. } // end of the 'PMA_auth_fails()' function
  632.  
  633. ?>
  634.